package com.itheima.set_demo;

import java.time.Period;

/*
    哈希值：是JDK根据对象的地址或者对象的属性算出来的int类型的数值

    Object类中有一个方法可以获取对象的哈希值
        1 public int hashCode​()：返回对象的哈希码值

    对象的哈希值特点
        1 同一个对象多次调用hashCode()方法返回的哈希值是相同的
        2 默认情况下，不同对象的哈希值是不同的。而重写hashCode()方法，不同对象的哈希值有可能相同


    哈希表结构
        JDK8之前 : 数组 + 链表
        JDK8版本及之后 : 数组 + 链表/红黑树
 */
public class HashCodeDemo {
    public static void main(String[] args) {
        Person p1 = new Person();

        // Object类中有一个方法可以获取对象的哈希值
        // public int hashCode​()：返回对象的哈希码值

        // 1 同一个对象多次调用hashCode()方法返回的哈希值是相同的
        // 因为Person类没有重写hashCode方法 ,所以获取的哈希码值是根据地址获取的
        System.out.println(p1.hashCode());
        System.out.println(p1.hashCode());
        System.out.println(p1.hashCode());

        // 2 默认情况下，不同对象的哈希值是不同的。而重写hashCode()方法，不同对象的哈希值有可能相同(哈希冲突)
        String s1 = "通话";
        String s2 = "重地";
        System.out.println(s1.hashCode());// 1179395
        System.out.println(s2.hashCode());// 1179395
    }
}
